#include<iostream>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
int n,m;
const int N=1e7+10;
int dist[N];

struct node
{
	int s,t,w;
}a[N];

const int INF=0x3f3f3f3f;

bool bf(int s)
{
	//初始化
	memset(dist, 0x3f, sizeof dist);

	dist[s]=0;
	
	bool flag;
	for(int i=1;i<=n;i++)
	{
		flag=false;
		for(int j=1;j<=m;j++)
		{
			int s=a[j].s;
			int t=a[j].t;int w=a[j].w;
			if(dist[s]+w<dist[t])
			{
				flag=true;
				dist[t]=dist[s]+w;
			}
		}
		if(flag==false) return false;
	}
	return flag;
}
int main()
{
	//注意这个题是一个有向图，每个边只存一次，但是他们可以相互向对方走 
	//对于这个题来说，两个人之间不一定有负权环，题目的意思就是只要他俩之间有负权环就输出forever love
	//个人感觉这个题的意思不明确。因为就算有负权环，可能存在一种情况就是1能走到n但是n不能走到1； 
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>a[i].s>>a[i].t>>a[i].w;
		a[i].w=-a[i].w;
	}
	
	int ret=bf(1);

	int ret1=dist[n];
	int ret2=bf(n);//以n为起点
	if(ret&&ret2)//注意这里不能写成ret==ret2==true,因为这条语句会被解析成(ret==ret2)==true; 
	{
		 cout<<"Forever love"<<endl;
		 return 0;
	}
	
	cout<<min(ret1,dist[1])<<endl; 
	return 0;
} 